SPORE.$Import('core.browser');
SPORE.$Import('core.class.extra');

/*
---

name: Cookie

description: Class for creating, reading, and deleting browser Cookies.

license: MIT-style license.

credits:
  - Based on the functions by Peter-Paul Koch (http://quirksmode.org).

requires: [Options, Browser]

provides: Cookie

...
*/

SPORE.register('core.cookie',function($ns){
	
	var Cookie = new Class({
	
		Implements: Options,
	
		options: {
			path: '/',
			domain: false,
			duration: false,
			secure: false,
			document: document,
			encode: true
		},
	
		initialize: function(key, options){
			this.key = key;
			this.setOptions(options);
		},
	
		write: function(value){
			if (this.options.encode) value = encodeURIComponent(value);
			if (this.options.domain) value += '; domain=' + this.options.domain;
			if (this.options.path) value += '; path=' + this.options.path;
			if (this.options.duration){
				var date = new Date();
				date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000);
				value += '; expires=' + date.toGMTString();
			}
			if (this.options.secure) value += '; secure';
			this.options.document.cookie = this.key + '=' + value;
			return this;
		},
	
		read: function(){
			var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)');
			return (value) ? decodeURIComponent(value[1]) : null;
		},
	
		dispose: function(){
			new Cookie(this.key, Object.merge({}, this.options, {duration: -1})).write('');
			return this;
		}
	
	});
	
	Cookie.write = function(key, value, options){
		return new Cookie(key, options).write(value);
	};
	
	Cookie.read = function(key){
		return new Cookie(key).read();
	};
	
	Cookie.dispose = function(key, options){
		return new Cookie(key, options).dispose();
	};
	
	this.Cookie = Cookie;

});